package com.yunlongn.async.action;

import com.yunlongn.async.function.RetryScheduleAction;
import com.yunlongn.async.function.RetryScheduleFail;

import java.util.concurrent.TimeUnit;

/**
 * RetryScheduleAction 的装饰器
 * @author yunlongn
 * @since 20210908
 */
public interface RetryActionWarp {
    /**
    * 包装action，返回null时表示过滤
    *
     * @param retrySubmitId 唯一ID
     * @param action 执行函数
     * @param periods 周期
     * @return  执行函数
    * @author yunlongn
    * @date 2022/1/18
    */
    <T> RetryScheduleAction<T> warpAction(String retrySubmitId, RetryScheduleAction<T> action, TimeUnit timeUnit, int... periods);

}
